// 缓冲区类
// Created by taojiaheng on 2020/6/4.
//

#ifndef WEBSOCKETSERVER_BUFF_H
#define WEBSOCKETSERVER_BUFF_H
#include "../../common/cdef.h"
/**
 * 可变长缓冲区
 */
class VariableBuff {
    // 缓冲区最小大小
    int min_buff_size;
    // 缓冲区最大大小
    int max_buff_size;
    // 缓冲区空间不足时每次增大大小
    int buff_cumulative_size;
    // 缓冲区指针
    char * buff;
    // 缓冲区大小
    int buff_size;
    // 缓冲区数据大小
    int buff_len;
    /**
     * 重新分配缓冲区大小并拷贝缓冲区数据
     * @param new_buff_size 新的缓冲区大小
     */
    void reassignmentBuff(int new_buff_size);
public:
    VariableBuff(int _min_buff_size = 10240, int _max_buff_size = 1024000, int _buff_cumulative_size = 10240);
    // 往缓冲区添加数据
    bool insetBuff(BUFF * buff);
    bool insetBuff(char * buff);
    // 获取缓冲区指针
    const char * data();
    // 获取缓冲区大小
    int length();
    // 到BUFF类型
    BUFF * toBuff();
    // 清空缓冲区
    void clear();
    // 从缓冲区中截断数据
    BUFF * subBuffer(int start_pos, int length);
    // 从缓冲区中删除一段数据
    void deleteBuffer(int start_pos, int length);
    // 从缓冲区截取一段数据并且从缓冲区中删除
    BUFF * popBuff(int start_pos, int length);
    ~VariableBuff();
};
#endif //WEBSOCKETSERVER_BUFF_H
